package com.yx.accountBook.utils;

import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则工具类
 */
public class RegUtil {


    /**
     * 清除标签样式
     * @param content
     * @param label
     * @return
     */
    public static String clearLabelStyle(String content, String label){
        if ("td".equals(label)) return clearTableTdStyle(content);
        List<String> replaceList = getRegexExtract(content, "<" + label + "[^>]*?>");
        for (String s : replaceList) {
            if (!"<p class=\"yxui-thead\">".equals(s) && !"<pre class=\"table-remark\">".equals(s)) {
                content = content.replace(s,"<" + label + ">");
            }
        }
        return content;
    }

    /**
     * 参数传递过来的是 标签集合
     * @param content
     * @param labelList
     * @return
     */
    public static String clearLabelStyle(String content, List<String> labelList){
        for (String s : labelList) {
            content = clearLabelStyle(content, s);
        }
        return content;
    }

    /**
     * 去除 td 的标签属性 保留 ConSpan 和 RowSpan 属性
     * @param content
     * @return
     */
    public static String clearTableTdStyle(String content){
        // 取出 td 所有标签
        List<String> tdList = getRegexExtract(content, "<td[^>]*?>", false);
        if (tdList.size() != 0){
            for (String td : tdList) {
                String replacement = "";
                // 从 td 里面拿出 RowSpan 和 ColSpan
                List<String> tdRCList = getRegexExtract(td, "(rowspan|colspan)=\"[^\"]+\"", false);
                StringBuffer sb = new StringBuffer();
                if (tdRCList.size() != 0) {
                    for (String s : tdRCList) {
                        sb.append(s + " ");
                    }
                    replacement = "<td " + sb.toString() + ">";
                }else {
                    replacement = "<td>";
                }
                content = content.replace(td, replacement);
            }
        }
        return content;
    }


    /**
     * 从内容中删除标签 <br /> 仅支持标签以 "/>" 结尾的标签  如 <img />
     * @param content
     * @param label
     * @return
     */
    public static String removeLabel(String content, String label){
        List<String> removeList = getRegexExtract(content, label);
        for (String s : removeList) {
            content = content.replace(s, "");
        }
        return content;
    }

    /**
     * 根据正则表达式，提取出 Content 内容中的数据
     * @param content   内容
     * @param regex     正则表达式
     * @param isRepeat  true 可重复结果集 false 不可重复结果集
     * @return
     */
    public static List<String> getRegexExtract(String content, String regex, boolean isRepeat) {
        if (StringUtils.isEmpty(content) || "[]".equals(content) || "[\"\"]".equals(content) ) return new ArrayList<String>();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(content);
        List<String> stringList = new ArrayList<>();
        while (m.find()) {
            if (isRepeat) {
                stringList.add(m.group());
            }else {
                if (!stringList.contains(m.group())) {
                    stringList.add(m.group());
                }
            }
        }
        return stringList;
    }

    /**
     * 根据正则表达式，提取出 Content 内容中的数据
     * @param content   内容
     * @param regex     正则表达式
     * @return
     */
    public static List<String> getRegexExtract(String content, String regex) {
        return getRegexExtract(content, regex, true);
    }

}
